
# Untitled - By: Return - Tue Jun 11 2024

import sensor, image, time          #导入传感器类、图像类、时间类
from pyb import UART                #导入串口类

uart = UART(3, 115200)               #实例一个串口3，波特率为9600 （TX=P4   RX=P5）
# 初始化摄像头
sensor.reset()                      # 复位和初始化摄像头传感器
sensor.set_pixformat(sensor.RGB565) # 设置像素格式为RGB565(或GRAYSCALE)
sensor.set_framesize(sensor.QQVGA)  # 设置图像大小为160*120
sensor.set_auto_whitebal(True)      # 设置自动白平衡
sensor.set_brightness(3000)         # 设置亮度为3000
sensor.skip_frames(time = 20)       # 跳过帧
clock = time.clock()                # 创建一个时钟对象来跟踪图像帧率

#红色 颜色阈值
white_threshold   = (15, 75, 20, 90, 0, 60)

# 查找最大色块函数
def find_max(blobs):
    max_size=0
    # 把blobs每个元素代入变量blob
    for blob in blobs:
        # 如果当前色块的像素量 跟之前比 是最多的
        if blob.pixels() > max_size:
            # 记录这个最多像素量的色块
            max_blob=blob
            # 更新最大像素量
            max_size = blob.pixels()
    return max_blob

#uart.write("Hello World!\r")    # 通过串口3输出固定字符串 “Hello World!”

# 主循环
while(True):
    clock.tick()                    # 更新FPS时钟
    img = sensor.snapshot()         # 创建一个对象，拍一张照片并返回图像数据给img对象
    #print(clock.fps())              # IDE调试输出帧率
                                    # 注意:当连接到IDE时，OpenMV Cam的运行速度约为一半。
                                    # 一旦断开连接，FPS应该会增加。


    # 在img对象中根据 传入的颜色阈值（white_threshold） 查找色块
    blobs = img.find_blobs( [ white_threshold ] )

    # 如果色块数量不为0
    if blobs:
        # 找到最大色块
        max_blob=find_max(blobs)

        # 在img图像中 对查找到的色块 画一个矩形
        # blobs.rect() 色块的矩形参数
        # draw_rectangle 画一个矩形框
        img.draw_rectangle(max_blob.rect())

        # 在图像上绘制一个十字。 cx代表中心x点  cy表示中心y点
        img.draw_cross(max_blob.cx(), max_blob.cy())

        # 整理字符串 将最大色块的 中心xy点 按照%d格式，格式化字符串
        output_str="[%d*%d]" % ( max_blob.cx(), max_blob.cy() )

        # 在IDE中输出字符串
        print( output_str + '\r\n' )
        # 通过串口3输出字符串
        uart.write(output_str + '\r\n' )
